{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Dahlin controller\n", "\n", "We will replicate the controller output in figure 17.11a. This notebook has a [video commentary](https://youtu.be/7c-f-6pMgt4)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Note* I am replicating these results using analytic methods to show that the artefacts are not numerical but rather fundamental to the calculations. If you simply want to simulate the action of a discrete controller on a continuous system, have a look at the [Simple discrete controller simulation](Simple%20discrete%20controller%20simulation) notebook." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sympy\n", "sympy.init_printing()\n", "import tbcontrol\n", "tbcontrol.expectversion('0.1.3')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Discretise the system\n", "--------------------------------" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need to find the corresponding z transform of the hold element and the system. Since $H=1/s(1 - e^{-Ts})$, we can find $F=G/s$, from there $f(t)$ and then work out the $z$ transform" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAF4AAAAhCAYAAABQphx6AAAABHNCSVQICAgIfAhkiAAAAsRJREFUaIHt2U+IVlUYx/HPTEU12sYkcFGGClagJQSCWAzRpk2LFHEjIu5KEwQZjRRBsU2FtGk7TYvaiJChi2oUFy5cWeA/yDLFfyADmmCMpS6eO3h5G9/33vuOHvE9Xzjce857zz2/9znPOfec85DJVOBt7MNF3MHytHKa059aQE2m4VesSy2kl8ken6lPNnwisuETkQ2fiGz4RDyZWkBNpmNeKf8y3sAYzqUQ1CsMimVkaxpOJymTyWQeWfqK652kKjKZx5EXcQgnxAnjB0nV9BCz8Hpx/wLOYyCdnN7lN7yUWkQqykcGnaI72/1/43K5Ybtv4inh9VPJE9iBP/FPcd3p4e7QK0XJyoavEt05LaaMibSggbDnMYK1qq+mhkXHd2IIH+FjvIIN+BBb6orsQkOlKFnZEw4UqR3/au/lfdgkjDob13HYvV5/GnvxGY50aKsJS/CD8Dg4W9wvrqGxW6rYsfbp5BxcEEP4O3FIVWYT1ggvm4/38VPxW5/wmlF8W7PdqhzBO8Lb4bUiv7+ixuRMNje9h2VienkXv+ASZpSeGcUX93nnUtzGsVKqOlUNqzbM+8Vouo1b4n/sbHmmncap0FCmdly4SoVpuIKNpbL1+A8/i7l2Zp1GS3yCG6V0C+MtZW9NUm+FOB5eKTp1lTgyXttAY1MNZR6I4eEgvm4pmys64xiu4dU6DRfMEOfuE2kPvmope3aSeufFB7XMpzjTQGNTDWXua8dullnPiLn0YEv5GXxZiBzDQpys+e6xIk3wd5H/vUO9AeHNZVrzVTU21VCJsuE7RXc+FyuEc2LnuVVMN98Uzw+JqeeoWP2sFkPz0FQIrcg+bBYf/+NYJDx75CFqrB0lG9Q+uvO92BSMi5XNHrFqmGAbTuEmruJH944IumVYtQ/bc9iNvwodf2CXGJ3daqyqYVCOkmUymUxPcxcC9dRyrI+QTgAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\frac{1}{15 s^{2} + 8 s + 1}$$" ], "text/plain": [ " 1 \n", "───────────────\n", " 2 \n", "15⋅s + 8⋅s + 1" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s, t = sympy.symbols('s, t')\n", "Gs = 1/(15*s**2 + 8*s + 1)\n", "Gs" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAATYAAAAYCAYAAABwbdFbAAAABHNCSVQICAgIfAhkiAAACB5JREFUeJztnHuMHVUdxz/stmXLNla00ALR8koBaXlIWyTKS5CCFQUbiIChCyialBpEUCHRrsbSNjYBrSIQxWJAJG2FKtLIqyBUeReqdkGtXh4trZaHILRsa9c/vr/Jzs49Z+7svTt3xsv5JJPZe17zm/n95pzfOb8zC4FAIBAI5MxC4DeevB8DV9nfs4A1wOt2/AGYnrt0gTKQ1Ua6gb7EsTFv4cpAW9ECBKqYAjzuSG8DPgEst98vAl8HjgAmA/cBtwOHNEHGQLFktRGAZ4E9Ysek3KUrMSOBbwLPAFuBF4ArgeGe8j8D/gl0Zmz/CDR6XNCYmC3FcKCXgaPrH2P5RwEvA8NS2ngF+IInL2+dQtBr3gzWRrqBPw2i/Za2kT3Qw+gFbgUWAH82Ya5zlJ8M7AAu8bR3idU9O5F+G/ASMKpxketmAXAvUuAW1DGsBuYA722yLG3AVPSspgLjgF1j+fORIbloB85COnONyM3SKWTX61jgv8D30bP+nNX9G9LFv4GH0AtQ5MyiQvV0rqhp3WBtpBt4C1gP/AO4Bdjb03ZL28gI5OL+B/hwLH0U8JxdZFyizl3Aa6i3d3ETusEDEumRgq5IEyhneoGHgRuQUSwCHjO51gPva7I8p6H1sp0ceT3ApxNpk5CutgOvAh931GumTiG7Xi+0cscDX7S/NwA3A/OQTl6z9KW4n0kzqJgc3Y7j0gLkGYyNnALMQHZyIhrEXwLek6jX8jZyhRWa5ci72vLOiKVNQL329SnC9QBv4O5Re9CDa0+pn0aXyXRcnfU7POlzrd1r6mw3Tjf+ET86jrOy3wIedLQxAY1QSZd/BLA/Gj3nAZuBiYkyzdZplF9LrytM3nbgo8CpjvbGAc+bjDNS2sqTih150k1+NhKnE9hEtZfV0jYyEo36G3DPqb9hlWfH0uZb2gmO8gvwK+mzVmaO/Z6WcnNpdNFYx+bjUGv3bk/+DPofei/wV2QcLiWNAQ6scexiZZcjtzvJZcAdGeS+B0XFIorQKdTW62jgbeCnqXcjopduUYayeVChvo6trDayEvhR7HdL2kh8Ifp04N3AT4BtjsqRd9MbSzsRuakPO8o/AdwIzAR+z8BO4gE7r7Lzx4DfZriBZnGqndck0tuRi/0ZNM9fgh7+KcjLOwDdb5zNdmRhEvBrR/qngMUZ6rcx0AstQqdQW6/Tkbf5S9dNJIjk3p6hbF7sjF7K9wNvIrv4HXpOScpsIx2ok1wZS2t5G7kZ9Xq34F5PeMTyo3WcTmsoHpVJEs2RL/Tkj7b8RzMI76KLofHYLkX3eBVy8/uAp4HdEuV+YHnzGDgoDEeK6gM+0IAcFTQa74mMDZNhG1pIjTMfOBotBk8ymXagFyiiCJ1Cbb0uQes5vqWAiGEmSyNefaNUcHsffweOdZQvk40sNBn3AY5EHt3rwPhYmZa3keeoPc/voz+qMsF+35Vy0WutzOSUMluoP7rUxdB0bBsZeI8rqDaSI1HHcbunjUiZ5zUgxzlof9oO4IeWdj4a+ZIsRjp7G4Xc76FasUXpFPx67UBrL0tq1Ae9mH34N6M2gzlofWcsmg5ORM9gB4o4HhorWzYb+QWaYvaiYNgyqjvVlraRTsv09cKj0MN5IZZ2lNW5NeWij1q9nVPKrCfbNKNCNgVEx+IMbSYZi1zzZ5FBfDCWF0V5fo57ZFtq+efXcd00lgNfraNekToFv14/addwbQOI8yUr10N1FM9HhcHZyE0Z23URvVC3xdKCjYjCbSRylfey8wZPA9OQKx3vFbfY2ecqDkNTpLXIq/AxMtZWGlfT73pHHIbWFm6keoH3qQxtJtmEDPVJ4C9oT1AUZTzJzmfVaOP5Oq6bxio0TRgsReoU/Ho9HRl9mhc2C/ieXecEtL8wC+vQxtKs+J5NFq4FvgIcE0sLNlIyG5mIer5feRq5w/KnxtL2tLSHPHUOsfwbUoRrQy71upQyaXQxNFNRF6ut7TFIiX0MXPwsO0XpFPx6bUeL5CtS6l5Mvxexe43rFMm7kJxRRxpsRJTKRsbgX8j7kAlwZyJ9J7S28y9Pm+dam7M9+QAHWZllacKl0EV+Hdsma3tXNLL0oZ3Y/y8UpVPw6/V40heVv2b5q5H8ZWYaknWt/Q42IkpnI2tRCDf+EfV4NMV7FfenGNGawf6OvC9b3syUa55nZS7KIqCDLurv2A6kejc1aCSJNuiuiqU/bWnJ3f8RH6H+jcZ5UYROwa/XRSZPMjAD/fulHif7mlreHIxblvFoX1ofA3fPBxspiY3Ew9HfQaHfe9EiaCdwpjU0HfcmxWVoI+I0tGcnzhN2notc3jfRaBaPdJxkN7Gc5nMy8F20H2kd+nh4LAqP74uiNZ+Plb8MzfmXoQjkGtQJ7oU+7B2O9jmViSJ0Cn69noaid5sS6TOBb1udB9GicJIK9QWEGuEM9B9UVqJvLd8A9kPPrgN5Mwtj5YONlNRGZpoQW1FI+Xr6FxhdjEAdwCOe/ItQhHErelBzY3mj0cKhLzSehS7q99gmonD5U2hOvx19VPsYimC5RoQpaLTaiPYNbUbz/Otw78IuA83UKfj1OsXKuz6a7qZ2BPP+FJnz4li0KP8M+iZxG5qC3Y2mXK5vE4ONtIiNXG6NHj7IerOt3tFDKUxgSKhXp+DX65WWvk9jogVKQsvbSAfa5Of6zMPHSBRiXpqLRIFGqUenkK7XHurbghMoJ+8IGzkG7dDO+g/nDkKu5d45yRNonMHqFIJe32kEGwkEAoFAIBAIBAKBQED8D8sm70bskEYpAAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\theta\\left(t\\right) + \\frac{3 e^{- \\frac{t}{3}} \\theta\\left(t\\right)}{2} - \\frac{5 e^{- \\frac{t}{5}} \\theta\\left(t\\right)}{2}$$" ], "text/plain": [ " -t -t \n", " ─── ─── \n", " 3 5 \n", " 3⋅ℯ ⋅Heaviside(t) 5⋅ℯ ⋅Heaviside(t)\n", "Heaviside(t) + ─────────────────── - ───────────────────\n", " 2 2 " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f = sympy.inverse_laplace_transform(Gs/s, s, t).simplify()\n", "sympy.nsimplify(sympy.N(f)).simplify()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see that $f(t)$ is the sum of 1 and two exponentials. It is easy to determine the corresponding z transforms from the table\n", "\n", "| Time domain | Laplace-transform | z-transform ($b=e^{-aT}$) |\n", "|-------------|-------------------|---------------------------|\n", "|$e^{-at}$ | $\\frac{1}{s+a}$ | $\\frac{1}{1-bz^{-1}}$ |\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "z, q = sympy.symbols('z, q')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the sampling interval" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "T = 1 # Sampling interval" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def expz(a):\n", " b = sympy.exp(-a*T)\n", " return 1/(1 - b*z**-1)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "Fz = -5/2*expz(1/5) + 3/2*expz(1/3) + 1/(1 - z**-1)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdoAAAAgCAYAAAC1mrlkAAAABHNCSVQICAgIfAhkiAAACPNJREFUeJztnXeoHFUUh7+8aBATsWCsoLHFgpGIDYNljTWKxpooGHk2BA0KoqLGsmCJoMEoJv6h6FOsqIiYCJFIFDE2gomKvTx7VwyKSYw+/zizOG927txzZ2d2Z7Png+HxZu+ce+6Z+U25FQzDMAzDMLqEQ4BngW+BIeBUxTH1KG18+74k/wyjm7gKeBNYCfyEaGtPzzF1TE9GNnnu0y3RV3YGPcZoYAUwM/C4D4GtY9uEgv0yjG6kBswHJgGTgbXAYmAzz3GmJyOLvPdpo4KEfNG+W64rhrFOMAb4Bzg+I00d05Ohx75oe4gdgW+Az4FHgXEd9cYwqslGyD3rV08605NRKexB23leB2YAxwDnA1sAr+KvHjOMXmMusBx4LSON6ckweoi8VRKjgR+AS4t1xzC6mluB74CdA48zPRlZWNVxj/In8B6wS6cdMYyKMAc4Czgc+CTwWNNTdehHHmy1zrrRfuxBWz02AHZD3t4No9e5EzgTOAx5YIZiejI6jj1oi2UMMDHaQDphTAS2i/6fCXyQOOY24FBgB+AA4EmkuuuBkn01jKozH/kKOgPpALVVtI2JpUlqyvRk+PDdp42KU6N5sPwQMBD9Xo/+j/MYMnB6DdJT8ilgj9I9NYzqk6alIURHDeoM15Tpqbr0U42q4xrZ92nDMAzD6Er6qcaD1jCMDjGI+wsqbXuoI14aRncwSJieBjrhZLtYr9MOGEZF+BRYFZD+27IcMYx1gLnAJol9E4GpSHv5YOK35W3wqWOMiP4m2w0NY11lhD9Jy5iejF4hRE/9wP1ID/IXA47rej01vmjbcfMxjF7B9GQYxdH1erLhPYZhGIZRIvEHbTvX6LsQmfB7FbAMONiTfpD0BvR5sTRa/7dG2gh+Av4C3kHG3TWop+STXM/yIuBtZJ3MlchcqscF+uKzEVImXzw1ZRpMSZOMscZnjZ2RwA0xnz8HbmR4n4GNkHaeL5DztBTYz1H+e4HbHb91iirrSRN/jf8aO4MUc11pyunLq57yW6i2i/JFm0ajA815CFnbt5f1FJJPrjhNQU7OyYoMWmE68Dcy4ffuyMwvf5A9WHgs/w9W3wo4guZu4hr/NwE+Ax4E9kcGtR8e+dGgjgyAj+c3NmFnKnAsMq3beOCmqEx7Bfjis6G1o4mnpkyaGGt81ti5GpmA4HhksPgJ0f/XxtI8BrwfHbdzVIbfgW0TfvchN8sa1aLKetLEX+O/xk5R15WmnL686rSu7aJ80abR6EBzHhYBZyMP1wnA04hukostlKmnfvIP72mXnrT5FBKnMgvyOnBPYt/HwOwAG3OROU9ddfcu/28GXvHYrpNvPctfgQsCfAmxkWVHE8864WXyxbhBls8uOwto7s7/QLQfZNq8tchNL84yRARxDgR+Qd7eryT9C+F6TxnKpmp68sU/icv/UDuQ/7rKU85kXnWK0XYRvmjSaHWQ5zy41vbtdT1p84nHCTyxancb7ShgH+D5xP7ngUkBNs4E7iO8N9qJyBJbjwA/Il3KZ9J88YesZzkSmSJuDFKtk4e8NkLiGVImTYw1PrvsLAUmI3PQgszcMxl4LnbcSJqH2/wFHJTYNxVYiNyQ5iFNA43tDuSt82GHf91OXj354q8l1E7e6ypPOV15tartIn3xpdHqIM/5dK3t28t6CiEeJ8gZq7LeGLaJbB+S2H8d8KHSxjSkcNtkpHH5vyraZgN7I1UpfyDtMg2mAKcg1StHAC8gE5Inq1gmRMeuBX5DqptCfAmx4bKjjae2TA2yYhzis8tOH3IO/kWq4IZo/lJdCryMVJGNRG5C/9B8nbyPVPMkuRppZ9k1w792UTU9aeIfx+V/qJ2811WecqblVYS2i/JFm0ajg9DzAPA48FZkM04v6ykkH1ecICBWvoLUcc/w0dhqKcc1LtJkx4HraZ5s38UipLE6C5f/a5DODXFmk70qiGs9y1FIm8m+kY2fSe9ckBVLrQ2Xnbzx9K3RmRXjEJ9ddqYBXwKnIze1Gcib9bmxNDsBLyHlWwu8gczGFD9X45G3+9EJ+7OQr5bxDr/aTdX0pIm/xv9QO3mvqzzl1Nwn8mi7LF9caTQ6CD0PrrV9e11P2nxccYLAWPkKsjlSTZG1bZhy3CjkYjktsX8ecjH52B55m0u2WSRx+f8F0lMszgxkzcoslgB3e9IsTrGd5UuIDZedVuLpKpM2xg1cPmfZ+Qq4JLHvGmR2piSjkaoYkLfwhbHfLqe5HerayH7oAuFlUjU9hcQf3P6H2GnlugotZ0heodouwxdNmiwdhJyHOcjLRdpCC72uJ20+aXGCjFjlnYLx52gLZQ3SkH8k8ERs/5HIKhs+zkbaVhf6Ejp4hebP+fHIA9hFYz3LJR7bfVHaVgi1kTeeWWUKjbHL5yw7GyI3ljjJ/xv8GW2bAkcDV8R+m8rwTiDXAechb6uuh0YVabeeQuKfRYidVq6r0HJq88qj7TJ80aTJ0oH2PNyJ9Jh2re3b63rSkowTBMQqvkbfEHAZ5azRNx25WM9DusbPRdpDto+lSVu3tQ95IN7isKvxfz+kDWMW8tZxGtJVPt5Gm1zPcgEy9izu3y1I1dE4pKqm0T4yJcAXnw2tHU08NWUCf4w1PmvsDABfI+MTxwEnIWP75sTSHB3Z3QG5iS1HenuuH/0+FjmXW0b/z0LENYnhQyZaffnJS5X1NIA//hr/NXagmOtKU05fXkVouyhftGl8OgDdeZgflXUyw/XRWNvX9KTLJxknCIxVjfS67IEiSxFxITJYezXydpjsWFCnuXfeUdE+V913DZ3/xwErkE5RHwEXM7zXsWY9ywFEHKuRN9HFiCBCfPHZCCmTL57aNTp9Mdb4rLGTHIT/GTL0Kn5hTkPeDFcj7Ul3ARvHfj+H/3uCjkBemNJidZjDh7KpOfwZKCGvUD1p4l/D77/GDhR3XfnK6curCG0X5Ys2jU8HoDsPrrbKevS76UmXTzxOUM1YGUZhPMPw6jPDMPJjetKRK07Jrt2G0S1sh4yDXNlpRwxjHcD0pMPiZBiGYRiGYRiGYRiGYRiGYRTBfwLSqDivkCYPAAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\frac{1.5}{1 - \\frac{0.716531310573789}{z}} - \\frac{2.5}{1 - \\frac{0.818730753077982}{z}} + \\frac{1}{1 - \\frac{1}{z}}$$" ], "text/plain": [ " 1.5 2.5 1 \n", "───────────────────── - ───────────────────── + ─────\n", " 0.716531310573789 0.818730753077982 1\n", "1 - ───────────────── 1 - ───────────────── 1 - ─\n", " z z z" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Fz" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see if we did that right" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import tbcontrol.symbolic" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def plotdiscrete(fz, N):\n", " values = tbcontrol.symbolic.sampledvalues(fz, z, N)\n", " times = [n*T for n in range(N)]\n", " plt.stem(times, values)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "import numpy" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "ts = numpy.linspace(0, 10, 300)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plotdiscrete(Fz, 10)\n", "plt.plot(ts, tbcontrol.symbolic.evaluate_at_times(f, t, ts))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is the transform of the system and the hold element. See the [Discrete control](Discrete%20control.ipynb) notebook for the derivation." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "HG_z = Fz*(1 - z**-1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dahlin Controller\n", "-----------------\n", "\n", "The desired closed loop response is first order" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "θ = 0 # system dead time \n", "λ = 1 # Dahlin's lambda\n", "h = θ # Dahlin's h" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First order response in eq 17-63" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "N = θ/T\n", "A = sympy.exp(-T/λ)\n", "yclz = (1 - A)*z**(-N-1)/(1 - A*z**-1)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "K = (1/HG_z*yclz/(1 - yclz)).simplify()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{1.0 \\left(0.632120558828558 z^{2} - 0.970470713623842 z + 0.370831136111342\\right)}{0.0279700831657292 z^{2} - 0.00455601047319787 z - 0.0234140726925314}$$" ], "text/plain": [ " ⎛ 2 ⎞\n", "1.0⋅⎝0.632120558828558⋅z - 0.970470713623842⋅z + 0.370831136111342⎠\n", "────────────────────────────────────────────────────────────────────\n", " 2 \n", " 0.0279700831657292⋅z - 0.00455601047319787⋅z - 0.0234140726925314 " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "K" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "#K = 0.632/(1 - z*-1) * (1 - 1.5353*z**-1 + 0.5866*z**-2)/(0.028 + 0.0234*z**-1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will model the control response to a unit step in reference signal" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "rz = 1/(1 - z**-1) # unit step in z" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can calculate the z-domain version of the controller output" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "uz = K/(1 + K*HG_z)*rz" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "N = 10" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plotdiscrete(uz, N)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This oscillating controller output is known as \"ringing\". It is an undesirable effect." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Continuous response\n", "-------------------\n", "\n", "By design the controlled variable follows an exponential at the sampling points." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "yz = K*HG_z/(1 + K*HG_z)*rz" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plotdiscrete(yz, N)\n", "plt.plot(ts, 1 - numpy.exp(-ts/λ))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But what does it really look like between data points? First, let's construct the response of the system to a single sampling time length pulse input" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "p = f - f.subs(t, t-T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that there is a slight issue with finding the value of this function at zero, so we avoid that point in plotting by starting at some small value which is not zero." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "smallvalue = 0.001" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.plot(p, (t, smallvalue, 10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's get the values of the controller output as a list:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "u = tbcontrol.symbolic.sampledvalues(uz, z, N)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we calculate the output of the system as the sum of the various pulse inputs." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "yt = numpy.zeros_like(ts)\n", "for i in range(0, N):\n", " yt += [float(sympy.N(u[i]*p.subs(t, ti-i + smallvalue))) for ti in ts]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we present the discrete system response, the designed response and the analytical continuous response on the same graph." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plotdiscrete(yz, 10)\n", "plt.plot(ts, 1 - numpy.exp(-ts/λ))\n", "plt.plot(ts, yt)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }